package com.service.database.model;

import cn.hutool.core.convert.Convert;
import com.common.utils.tool.StringUtil;
import com.service.database.utils.CommonUtils;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Map;

/**
 * 数据列
 * @author xianggj
 * @Date 2021/6/4 22:16
 **/
@Data
@NoArgsConstructor
public class DataColumn implements Serializable {
    private static final long serialVersionUID = -8823211112377L;

    /**
     * 列名
     */
    private String columnName;


    /**
     * 列类型（类型太多，直接字符串展示）
     */
    private String dataType;

    /**
     * 列类型
     * 统一类型 java.sql.Types
     */
    private int dataTypeInt;

    /**
     * 列注释
     */
    private String columnComment;

    /**
     * 字段可以容纳的字符长度，此处配置请取配置信息(设计器中的配置名称好像是 db_field_type)， 如果没有可以留空
     */
    private Integer length;
    /**
     * 字段可以容纳的字符长度，此处配置请取配置信息(设计器中的配置名称好像是 db_field_type)， 如果没有可以留空
     */
    private Integer floatLength;

    /**
     */
    private Boolean columnKey;

    /**
     */
    private Boolean isNull;

    public Boolean getColumnKey() {
        if (columnKey == null){
            return false;
        }
        return columnKey;
    }

    public Boolean getIsNull() {
        //主键不可能为空
        if (columnKey != null && columnKey){
            return false;
        }
        if (isNull == null){
            return true;
        }
        return isNull;
    }

    public DataColumn(Map<String,Object> map) {

        String dataType = StringUtil.toString(map.get("dataType"));
        this.dataType = dataType;
        this.columnName = StringUtil.toString(map.get("columnName"));
        this.columnComment = StringUtil.toString(map.get("columnComment"));
        this.columnKey = Convert.toBool(map.get("columnKey"));
        this.dataTypeInt = CommonUtils.typeStrToInt(dataType);
        this.isNull = Convert.toBool(map.get("isNull"));
        this.length = Convert.toInt(map.get("length"));
        this.floatLength = Convert.toInt(map.get("floatLength"));
    }

}
